import { getMyRouteList } from '@/services/myApi';
import { set } from 'immutable';
import key from 'keymaster';
import React, { useMemo } from 'react';
import User from './user';
export default {
  namespace: 'global', //所有models 里面的 namespace 不能重名
  // 初始化 全局数据  存放公共数据
  state: {
    routes: sessionStorage.getItem('routes')
      ? JSON.parse(sessionStorage.getItem('routes'))
      : [],
    activeMenu: sessionStorage.getItem('active-menu') || '1',
  },

  // 处理同步业务
  reducers: {
    // 修改路由
    setRoutes(state, { payload }) {
      sessionStorage.setItem('routes', JSON.stringify(payload));
      return {
        ...state,
        routes: payload,
      };
    },
    // 修改菜单
    setMenus(state, { payload: { currentMenu } }) {
      sessionStorage.setItem('active-menu', currentMenu);
      return set(state, 'activeMenu', currentMenu);
    },
  },

  //   处理 异步业务
  effects: {
    // call 意为执行异步函数
    // put  代表 发出一个 action
    // select 表示从state中 获取一些数据
    // yield  类似 await   相当于 同步书写异步的代码
    // *getRoutes({ payload: { resolve } }, { call, put }) {
    //   const { data } = yield call(getMyRouteList);
    //   if (data)
    //     yield put({
    //       type: 'setRoutes',
    //       payload: { data, resolve } || {},
    //     });
    // },
  },

  //   subscriptions   监听作用
  subscriptions: {
    // 监听路由 跳转
    listenRoute({ dispatch, history }) {
      // 可以带参数 dispatch 和 自带的 history方法等等
      history.listen(({ pathname, query }) => {
        console.log('当前路由' + pathname);
      });
    },

    // // 监听 键盘事件
    listenKeyboard({ dispatch }) {
      key('ctrl + i', () => {
        // 触发后执行 setText 函数  改变 text数据
        dispatch({ type: 'setText' });
      });
    },

    // 监听 浏览器窗口变化
    listenResize() {
      window.onresize = function () {
        const value = window.innerWidth;
        console.log('浏览器窗口变化了,当前为:' + value);
      };
    },

    // 监听 滚动条的状态
    listenScroll() {
      window.onscroll = function () {
        console.log('我滚了...');
      };
    },
  },
};
